package com.eva.core.config.security;

import com.eva.core.model.LoginUserInfo;
import com.eva.core.utils.Utils;
import com.eva.service.common.CacheProxy;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 默认用户缓存
 */
@Component
public class UserDetailsCache {

    @Resource
    private CacheProxy<String, LoginUserInfo> cacheProxy;

    /**
     * 写入用户信息到缓存中
     *
     * @param token 登录令牌
     * @param value 用户信息
     */
    public void put(String token, LoginUserInfo value) {
        cacheProxy.put(this.getTokenCacheKey(token), value, Utils.AppConfig.getSession().getExpire());
    }

    /**
     * 获取用户信息
     *
     * @param token 登录令牌
     * @return LoginUserInfo
     */
    public LoginUserInfo get (String token) {
        return cacheProxy.get(this.getTokenCacheKey(token));
    }

    /**
     * 删除用户信息
     * @param token 登录令牌
     */
    public void remove (String token) {
        cacheProxy.remove(this.getTokenCacheKey(token));
    }

    /**
     * 重新延长登录令牌的存储时长
     *
     * @param token 登录令牌
     */
    public void relive (String token) {
        cacheProxy.relive(this.getTokenCacheKey(token), Utils.AppConfig.getSession().getExpire());
    }

    /**
     * 获取登录令牌缓存Key
     *
     * @param token 登录令牌
     * @return 缓存Key
     */
    private String getTokenCacheKey(String token) {
        return Utils.AppConfig.getSession().getTokenCachePrefix() + token;
    }
}
